import { defineConfig } from 'vite'
import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js'

import path from 'path';

import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite';
import eslint from 'vite-plugin-eslint';
import deadcode from 'vite-plugin-deadcode';

import { baseSize } from './src/utils/resize';

// const VITE_API_PROXY_URL = import.meta.env.VITE_API_PROXY_URL;


// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    cssInjectedByJsPlugin(),
    Components({
      // 自动生成类型声明文件
      dts: true,
      // 指定组件目录，默认是 src/components
      dirs: [
        'src/components',
        'src/ui/components/pannel',
        'src/ui/components/swiper',
        'src/ui/components/dialog',
        'src/ui/components/popup',
        'src/ui/components/form',
        'src/ui/components/upload',
        'src/ui/components/video'
      ],
      // 包含子目录中的组件
      deep: true,
      // 组件名称转换方式
      directoryAsNamespace: true,
      // UI库解析器，例如 Element Plus 自动导入
      resolvers: [
        (name) => {
          if (name.match(/^El[A-Z]/)) {
            return {
              name: name.slice(2),
              from: 'element-plus'
            };
          }
        }
      ]
    }),
    eslint({
      include: ['src/**/*.js', 'src/**/*.vue', 'src/*.js', 'src/*.vue'], // 指定要检查的文件
      exclude: ['node_modules/**', 'public/**'], // 指定要排除的文件
      fix: true, // 自动修复代码问题
      cache: false, // 禁用缓存
    }),

    deadcode({
      inputDir: 'src', // 指定检测目录
      outDir: 'dist', // 指定检测结果输出目录
    }),
  ],
  css: {
    preprocessorOptions: {
      plugins: {
        'postcss-pxtorem': {
          rootValue: baseSize, // 设计稿宽度的1/10，例如设计稿宽度为375px
          propList: ['*'], // 需要转换的属性，* 表示所有属性
          exclude: /(node_module)/, // 排除某些文件夹
          selectorBlackList: ['.ignore'], // 忽略某些选择器
          replace: true, // 是否直接替换值
          mediaQuery: false, // 是否转换媒体查询中的 px
          minPixelValue: 2, // 最小转换值
        },
      },
      scss: {
        additionalData: `@use "@/global.scss" as *;`,
        javascriptEnabled: true
      }
    }
  },
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
      '@components': path.resolve(__dirname, './src/components'),
      '@views': path.resolve(__dirname, './src/views'),
    },
    extensions: ['.vue', '.ts', '.tsx', '.js', '.jsx', '.json'],
  },
  // server: {
  //   proxy: {
  //     '/api': {
  //       target: VITE_API_PROXY_URL, // 目标域名
  //       changeOrigin: true, // 需要代理跨域
  //       rewrite: (path) => path.replace(/^\/api/, ''), // 路径重写，把 '/api' 替换为 ''
  //     },
  //   },
  // }
})
